export default {
	// 开启命名空间
	namespaced:true,
	// 分模块内的state最好写为函数格式 方便后期维护数据
	state:()=>{
		return {
			// JSON.parse将JSON格式转为普通格式 三元运算符 如果没找到key名为car的数据 就赋值为空数组
			car:JSON.parse(uni.getStorageSync('car') || '[]')
		}
	},
	mutations:{
		addTocar(state,details){
			// find的返回值是查找的元素 ↓返回查到（goods_id）的第一个元素
			const Findresult = state.car.find(item=>item.goods_id === details.goods_id);
			// 如果Findresult为true
			if(Findresult){
				// Findresult的goods——count ++
				Findresult.goods_count ++;
			}else{
				// 如果没找到 将元素添加到state里存放数据
				state.car.push(details);
			}
			// 触发保存到本地存储的方法
			this.commit('car/saveStorage');
		},
		// 将数据保存到本地存储
		saveStorage(state){
			// 第一个参数是保存的key 第二个是要保存的数据 storage里存储的格式都是JSON格式 需要通过JSON.stringify来转换
			uni.setStorageSync('car',JSON.stringify(state.car));
		},
		// 更改status
		updateState(state,goods){
			// 用传进来的id在state数据中查找元素
			const Findresult = state.car.find(item=>item.goods_id === goods.goods_id);
			// 如果查找到了
			if(Findresult){
				// 将最新的status状态赋值给state数据中的status
				Findresult.goods_status = goods.goods_status;
				// 执行本地存储 存储最新的状态
				this.commit('car/saveStorage');
			}
		},
		updateCount(state,goods){
			const Findresult = state.car.find(item=>item.goods_id === goods.goods_id);
			if(Findresult){
				Findresult.goods_count = goods.goods_count;
				this.commit('car/saveStorage');
			}
		},
		// 根据id删除元素
		removeItem(state,goods){
			// filter:方法创建一个新的数组，新数组中的元素是通过检查指定数组中符合条件的所有元素
			state.car = state.car.filter(item=>item.goods_id !== goods.goods_id);//返回当前点击数据 过滤和当前点击的数据id不一致的
			this.commit('car/saveStorage');
		},
		// 全选更改所有单选框
		updateAllstatus(state,newStatus){
			state.car.forEach(item=>item.goods_status == newStatus);
			this.commit('car/saveStorage');
		}
	},
	actions:{},
	getters:{
		// 购物车商品总数量
		total(state){
			// sum必须是个变量用let声明
			let sum = 0;
			// forEach遍历数组 将goods_count相加
			state.car.forEach(item=>sum += item.goods_count);
			// 计算属性必须使用return返回数据
			return sum;
		},
		// 选中的合计数量
		checkedAll(state){
			// 在car中过滤 过滤goods_status为true的元素 使用累加器将goods_count增加
			const result = state.car.filter(item=>item.goods_status == true);
			const all = result.reduce((all,item)=>all += item.goods_count,0);
			return all;
		},
		// 计算总金额
		TotalAmount(state){
			// filter就是查找对应的元素 返回符合条件的新数组
			// item.goods_status：该元素选中状态下
			// reduce是累加器
			return state.car.filter(item=>item.goods_status).reduce((amount,item)=>amount += item.goods_count * item.goods_price,0).toFixed(2);
		}
	}
}